﻿/*
File: CPrimitive.h

Leírás:
A térben jelen lévő, mozgatható primitívek(kocka,gömb,stb) interfészének megvalósítása. Alap osztálya a konkrét primitíveknek.

Szerző:
SevN
*/
#ifndef __CPRIMITIVE_H__
#define __CPRIMITIVE_H__


#include "IRenderable.h"
#include "..\Includes\IPrimitive.h"
#include "CObject.h"

namespace Content
{
  class CPrimitive : public IPrimitive, public IRenderable
  {
    public:
      virtual ~CPrimitive();
      virtual void clean() = 0;
      virtual void render(){}
      // színbeállítás
      virtual void setColor(const int r, const int g, const int b);

      // szín lekérdezése
      virtual void getColor(int& r, int& g, int& b);

      virtual void onLostDevice(){}
      virtual void onResetDevice(){}

      // csúcspontok száma
      int getNumVertices();

      // indexek száma
      int getNumIndices();

      // háromszöget szőma
      int getNumTriangles();

      // vertex struktúra lekérdéezés
      PrimitiveVertex const* getVertices();

      // index tömb lekérése
      WORD const* getIndices();

       
      void setPos(const float x, const float y,const float z);
      void getPos(float& x, float& y, float& z);
	    void moveVec(const float x, const float y, const float z);
      void getOrientation(float& yaw, float& pitch, float& roll);
	    void yaw(const float f);
	    void pitch(const float f);
	    void roll(const float f);
	    void setYaw(const float f);
	    float getYaw();
	    void setPitch(const float f);
	    float getPitch();
  	  void setRoll(const float f);
  	  float getRoll();
      void setVisible(const bool b);
      bool isVisible();

  private:
      CObject* pPrimObj;

      virtual void initVertices() = 0;
      virtual void initIndices() = 0;
      

  protected:
      CPrimitive();

      struct PrimitiveVertex* vertices;
      WORD* indices;

      int numVertices;
      int numTriangles;
      int numIndices;

      int red,green,blue;
};

}


#endif